import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)

// 每当初始化项目时，就先从 localStorage 中取一下数据
let car = window.JSON.parse(localStorage.getItem('cart') || '[]')

const store = new Vuex.Store({
    state: {
        // 购物车的数组
        // cart: []
        cart: car,

        infos: {
            id: 21,
            title: "小米(MI)小米Note，16G 双网通版",
            price: "¥2699",
            sale: "¥2199",
            number: "fjdhdu-48944r3",
            stock: "60",
            time: new Date(),
        },

    },
    mutations: {
        addToCart(state, goods) {
            // 将商品添加到购物车中，如果之前有这条商品，则只需更新数量，如果没有则直接push
            let flag = false
            state.cart.some((item) => {
                if (item.id == goods.id) {
                    item.count += goods.count
                    flag = true
                    return true
                }
            })
            // 如果之前没有这条商品，则直接push
            if (!flag) {
                state.cart.push(goods)
            }

            // 为了持久化存储购物车的数据，可以把购物车的商品，序列化出来，存储到 localSorage 中
            localStorage.setItem('cart', window.JSON.stringify(state.cart))
        },

        // 根据传递过来的商品信息，更新购物车中商品的数量
        updateGoodsCount(state, goods) {
            state.cart.some(item => {
                if (item.id == goods.id) {
                    item.count = goods.count
                    return true
                }
            })

            localStorage.setItem('cart', window.JSON.stringify(state.cart))
        },

        delCart(state, id) {
            state.cart.some((item, i) => {
                if (item.id == id) {
                    state.cart.splice(i, 1)
                    return true
                }
            })
            localStorage.setItem('cart', window.JSON.stringify(state.cart))

        },

        changeSelectedState(state, obj) {
            // 根据提供的 obj对象的id 和 selected 属性，来更改购物车中商品的选中状态
            state.cart.some((item) => {
                if (item.id == obj.id) {
                    item.selected = obj.selected
                    return true
                }
            })
            localStorage.setItem('cart', window.JSON.stringify(state.cart))
        }

    },
    getters: {
        totalCount(state) {
            // 徽标中商品数量
            let c = 0
            state.cart.forEach(item => c += item.count)
            return c
        },
        // 获取购物车中所有商品的id字符串
        idstr(state) {
            let arr = []
            state.cart.forEach(item => arr.push(item.id))
            return arr.join(',')

        },
        countObj(state) {
            let o = {}
            state.cart.forEach(item => o[item.id] = item.count)
            return o
            // console.log(o);

        },
        selectedObj(state) {
            // id 对应的商品是否被选中了
            let o = {}
            state.cart.forEach(item => { o[item.id] = item.selected })
            return o
            console.log(o);
        },

        // 勾选商品的数量
        selectedCount(state) {
            let c = 0
            state.cart.forEach(item => {
                // 只有这一项商品被选中了，才把数量加起来
                if (item.selected) {
                    c += item.count
                }
            })
            return c
        },
        // 总价
        amount(state) {
            let c = 0
            state.cart.forEach(item => {
                // 只有这一项商品被选中了，才把数量加起来
                if (item.selected) {
                    c += item.count * item.price
                }
            })
            return c
        }



    }
})

export default store